/*
 * main.c
 *
 *  Created on: Jul 24, 2010
 *      Author: carlo
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "libwsnpkt.h"

#define BUFF_SIZE 100												// buffer contenente il pacchetto
#define MAC_ADDR { 0x0A, 0x0B, 0x0C, 0x0D, 0x0A, 0x0B, 0x0C, 0x0D }	// mac address
#define MAC_ADDR_SIZE 8 											// 8 byte di max address

int main()
{
	unsigned char pkt[BUFF_SIZE];  						   	   			// creiamo il buffer contenente il pacchetto
	char mac_address[MAC_ADDR_SIZE] = MAC_ADDR;  	  			// mac address
	char pkt_size;									   			// variabile contenente la dimensione effettiva del pacchetto
	int seq;
	int temp = 34;
	float hum = 23.3;
	int i, ret;
	unsigned char list[5];
	//unsigned short sh = 0x5a5a5a5a;

	/*  ----------------------------------------------------------------------  */
	/*						LATO NODO											*/
	/*  ----------------------------------------------------------------------  */

	pkt_size = pkt_init(pkt, BUFF_SIZE, 0); 						// inizializziamo il pacchetto (con seq = 0)
	if(pkt_size < 0) {					 						// controlliamo che tutto sia andato bene
		fprintf(stderr, "D'HO!\n");
		exit(1);
	}

	pkt_size = pkt_set_mac(pkt, mac_address, MAC_ADDR_SIZE);  	// setto il mac address
	if(pkt_size < 0) {
		fprintf(stderr, "D'HO!\n");
		exit(1);
	}

	for(i = 0; i < pkt_size; i++)
		printf("%x:", pkt[i]);
	printf("\n");

	pkt_set_seq(pkt, 18);	// cambiamo il sequence number

	pkt_size = pkt_set_sensor(pkt, BUFF_SIZE, SENS_ID_TEMP, (char *) &temp, sizeof(int)); 			// metto nel pacchetto la temperatura
	if(pkt_size < 0) {
		fprintf(stderr, "D'HO!\n");
		exit(1);
	}

	pkt_size = pkt_set_sensor(pkt, BUFF_SIZE, SENS_ID_HUM, (char *) &hum, sizeof(float)); 			// metto nel pacchetto l'umidit��
	if(pkt_size < 0) {
		fprintf(stderr, "D'HO!\n");
		exit(1);
	}

	pkt_size = pkt_set_sensor(pkt, BUFF_SIZE, SENS_ID_HUM, (char *) &hum, sizeof(float)); 			// metto nel pacchetto l'umidit��
	if(pkt_size < 0) {
		fprintf(stderr, "D'HO!\n");
		exit(1);
	}

	for(i = 0; i < pkt_size; i++)
		printf("%x:", pkt[i]);
	printf("\n");

	ret = pkt_get_sensors_list(pkt, list, 5);
	printf("--> %d\n", ret);
	for(i = 0; i < ret; i++)
		printf("%x:", list[i]);
	printf("\n");


	for(i = 0; i < pkt_size; i++)
		printf("%x:", pkt[i]);
	printf("\n");

	/*  ----------------------------------------------------------------------  */
	/*                    	INVIO PACCHETTO di dimensione pkt_size				*/
	/*  ----------------------------------------------------------------------  */

	/*  ----------------------------------------------------------------------  */
	/*						LATO GATEWAY										*/
	/*  ----------------------------------------------------------------------  */

	pkt_size = pkt_get_size(pkt);
	printf("Ricevuto pacchetto di %d bytes\n", pkt_size);

	pkt_size = pkt_get_mac(pkt, mac_address, MAC_ADDR_SIZE);
	if(pkt_size < 0) {
		fprintf(stderr, "D'HO!\n");
		exit(1);
	}
	printf("Ricevuto da: 0x%X%X%X%X%X%X%X%X\n", mac_address[0], mac_address[1], mac_address[2], mac_address[3], mac_address[4], mac_address[5], mac_address[6], mac_address[7]);

	seq = pkt_get_seq(pkt);
	printf("Ha un seq number: %d\n", seq);

	hum = 0;

	pkt_size = pkt_get_sensor(pkt, SENS_ID_HUM, (char *) &hum, sizeof(float));
	if(pkt_size < 0) {
		fprintf(stderr, "D'HO!\n");
		exit(1);
	}
	printf("Umidity: %f,  restano %d bytes nel pacchetto\n", hum, pkt_size);

	temp = 0;

	pkt_size = pkt_get_sensor(pkt, SENS_ID_TEMP, (char *) &temp, sizeof(int));
	if(pkt_size < 0) {
		fprintf(stderr, "D'HO!\n");
		exit(1);
	}
	printf("Temperatura: %d,  restano %d bytes nel pacchetto\n", temp, pkt_size);

	return(0);

}
